package com.second.app.thread.stream;

import java.io.IOException;
import java.io.PipedInputStream;

/**
 * @author gyz
 * @date 2021/1/26 17:27
 */
public class ReadData {
    /**
     * 自定义一个长度为20的缓冲字节数组，
     * PipedInPutStream和PipedOutPutStream建立管道通信连接后，开启ReadData线程后，read方法会阻塞。
     * 直到PipedOutputStream开始输出字，这时候read方法会开始读取字节，缓存到byte数组里面，每一次读取20长度
     * 一个数字占用一个字节，正好每次读取20个数字。重复循环去读，直到read返回-1，表示读到字节流末尾的最后一个字节。
     * <p>
     * 比如第一次输出的newData: 1234567891011121311 拆分下来 对应十进制的ASCII值
     * 1  2  3  4  5  6  7  8  9  1
     * 49 50 51 52 53 54 55 56 57 49
     * <p>
     * 0  1  1  1  2  1  3  1  4  1
     * 48 49 49 49 50 49 51 49 52 49
     *
     * @param inputStream
     */

    public void readMethod(PipedInputStream inputStream) {
        try {
            System.out.println("线程："+Thread.currentThread().getName()+"开始reading......");
            byte[] b = new byte[20];
            int len = inputStream.read(b);
            while (len != -1) {
                String newData = new String(b, 0, len);
                System.out.println(newData);
                len = inputStream.read(b);
            }
            System.out.println();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

